home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / rterrors.c < prev    next >
Text File  |  1996-05-27  |  12KB  |  517 lines

  1. /*
  2.  * rterrors.c
  3.  *
  4.  * Purpose:
  5.  * --------
  6.  * Routines de gestion des 'run time errors"
  7.  * En particulier gestion d'un log ds une fenetre
  8.  *
  9.  * History:
  10.  * --------
  11.  * 26.09.94: fplanque: Created
  12.  */
  13.  
  14.  
  15.      #include "!OPTIONS.H"                /* Options de compilation */         
  16.     #define    THIS_FILE    "RTERRORS.C v1.00 - 03.95"
  17.           
  18.  
  19. /*
  20.  * System headers:
  21.  */
  22.     #include    <stdio.h>
  23.     #include <string.h>   
  24.     #include <stdlib.h>   
  25.     #include    <errno.h>
  26.  
  27. /*
  28.  * Custom headers:
  29.  */
  30.     #include    "SPEC_PU.H"
  31.     #include    "WIN_PU.H"
  32.     #include    "TEXT_PU.H"
  33.     #include    "RTERR_PU.H"    
  34.     #include    "FILES_PU.H"    
  35.  
  36.  
  37. /*
  38.  * ------------------------- MEMBRES PRIVES ----------------------------
  39.  */
  40.     /*
  41.      * fenetre de log des erreurs:
  42.      */
  43.     WIPARAMS    *    M_pWiParams_Errors = NULL;
  44.  
  45.  
  46.  
  47. /*
  48.  * ----------------------- OPERATIONS PRIVEES -------------------------
  49.  */
  50.  
  51.  
  52. /*
  53.  * ------------------------ IMPLEMENTATION -------------------------
  54.  */
  55.  
  56.  
  57. /*
  58.  * errors_CreateWinText(-)
  59.  *
  60.  * Purpose:
  61.  * --------
  62.  * Pr‚paration du log d'erreurs pour son affichage ne fenetre
  63.  * ainsi que de ses paramŠtres d'affichage
  64.  *
  65.  * History:
  66.  * --------
  67.  * 25.05.94: fplanque: Created based on debug_CreateWinText()
  68.  */
  69. int    errors_CreateWinText(                         /* Out: OK1 si ouverture OK */
  70.             TEXT_DRAWPAR * *    ppTextDrawPar )    /* In: Ptr sur conteneur des params d'affichage nlle fenetre */
  71. {
  72.     /*
  73.      * Cr‚e texte vide
  74.      */
  75.     TEXTINFO * pTextInfo_Errors = create_TextInfo();
  76.  
  77.     /*
  78.      * Cr‚e des paramŠtres d'affichages pour ce texte:
  79.      */
  80.     *ppTextDrawPar = create_TextDrawPar( pTextInfo_Errors, 200 );
  81.  
  82.     if ( *ppTextDrawPar == NULL )
  83.     {
  84.         return    WRONG0;
  85.     }
  86.  
  87.     return    OK1;
  88. }
  89.  
  90.  
  91.  
  92. /*
  93.  * errors_OpenLogWin(-)
  94.  *
  95.  * Purpose:
  96.  * --------
  97.  * Param‚trage d'une fenˆtre texte en vue de son ouverture
  98.  *
  99.  * History:
  100.  * --------
  101.  * 26.09.94: fplanque: Created based on open_text()
  102.  */
  103. void    errors_OpenLogWin( 
  104.             WIPARAMS      *    pWiParams,             /* In: fenetre concern‚e */
  105.             TEXT_DRAWPAR *    pTextDrawPar )        /* In: Parals d'aff texte */
  106. {
  107.     TEXTINFO *    pTextInfo = pTextDrawPar -> pTextInfo;
  108.  
  109.     /* 
  110.      * Pointe sur infos texte: 
  111.      */
  112.     pWiParams -> content_ptr.textInfo= pTextInfo;    
  113.  
  114.     /* 
  115.      * Pointe sur informations texte en RAM: 
  116.      */
  117.     pWiParams -> draw_ptr.pTextDrawPar    = pTextDrawPar;    
  118.  
  119.     calc_textSizeW( pWiParams );
  120.     calc_textSizeH( pWiParams );
  121.     pWiParams -> h_step = (pTextDrawPar -> n_cell_w) *8;    /* Saut par 8 car */
  122.     pWiParams -> v_step = pTextDrawPar -> n_cell_h;        /* Saut par ligne */
  123.  
  124.     /*
  125.      * Options menu: 
  126.      */
  127.     pWiParams -> menu_options.savedisk    = TRUE_1;    /* On peut sauver le contenu de la fenˆtre */
  128.     pWiParams -> menu_options.affichage = PARAFF_TEXT;    /* On peut r‚gler la taille du texte */
  129.  
  130.     /*
  131.      * m‚mo adr Fenetres d'erreurs:
  132.      */
  133.     M_pWiParams_Errors = pWiParams;     /* Adr de la fenˆtre de debug */
  134.     
  135. }
  136.  
  137.  
  138.  
  139. /*
  140.  * errors_CloseLogWin(-)
  141.  *
  142.  * Purpose:
  143.  * --------
  144.  * Fermeture du log d'erreurs ds fenetre
  145.  * Appell‚ lors de la fermeture de la fenetre de type TYP_ERRORS
  146.  * 
  147.  * History:
  148.  * --------
  149.  * 26.09.94: fplanque: Created
  150.  */
  151. void errors_CloseLogWin(
  152.             WIPARAMS    *    pWiParams_Closed )
  153. {
  154.     /*
  155.      * On vient de fermer la fenetre:
  156.      * il n'y a donc plus de fenetre de log des erreurs:
  157.      */
  158.     M_pWiParams_Errors = NULL;
  159.  
  160.     /*
  161.      * Efface le log des erreurs en RAM:
  162.      * LibŠre le texte formatt‚:
  163.      */
  164.     free_formatext( pWiParams_Closed -> draw_ptr.pTextDrawPar -> pTextInfo );
  165.  
  166. }
  167.  
  168.  
  169.  
  170.  
  171. /*
  172.  * errorLog_AddLine(-)
  173.  *
  174.  * Purpose:
  175.  * --------
  176.  *    Enregistrement d'un message d'erreur dans fenetre log
  177.  * 
  178.  * History:
  179.  * --------
  180.  * 25.09.94: fplanque: Created
  181.  */
  182. void    errorLog_AddLine(
  183.             const char    * cpsz_ErrorMsg )
  184. {
  185.     if( M_pWiParams_Errors == NULL )
  186.     {    /*
  187.          * Si fen d'erreurs pas encore ouverte, on va l'ouvrir:
  188.          */
  189.  
  190.          ouvre_fenetre( CLASS_TEXT, TYP_ERRORS,
  191.                              NULL,NULL,NULL,
  192.                              " Messages d'erreur " );
  193.     }
  194.  
  195.     /* text_addLineToEnd( M_pTextInfo_Errors, cpsz_ErrorMsg ); */
  196.  
  197.     add_textinf( M_pWiParams_Errors, cpsz_ErrorMsg );
  198. }
  199.  
  200.  
  201.  
  202. /*
  203.  * -------------------- BOITES d'ALERTES ERREUR ------------------
  204.  */
  205.  
  206.  
  207.  
  208. /*
  209.  * erreur(-)
  210.  *
  211.  * Purpose:
  212.  * --------
  213.  * Affiche boite d'alerte avec texte d'erreur
  214.  *
  215.  * History:
  216.  * --------
  217.  * 1992: fplanque: Created
  218.  */
  219. void erreur( const char *texte_erreur )
  220. {
  221.     int    choix;
  222.     
  223.     choix=form_alert(1,texte_erreur);
  224.  
  225.     if (choix == 1)
  226.         exit( 0 );                /* Termine prg */
  227. }
  228.  
  229.  
  230. /*
  231.  * erreur_rsrc(-)
  232.  *
  233.  * Purpose:
  234.  * --------
  235.  * Signale erreur dans fichier ressources
  236.  *
  237.  * History:
  238.  * --------
  239.  * 1992: fplanque: Created
  240.  */
  241. void erreur_rsrc( void )
  242. {
  243.     erreur("[3][Erreur innatendue!|Le fichier RSC|a du ˆtre endommag‚!][Quitter|Continuer]");
  244. }
  245.  
  246.  
  247.  
  248. /*
  249.  * alert(-)
  250.  *
  251.  * Purpose:
  252.  * --------
  253.  * Affiche boite d'alerte avec message d'erreur correspondant … un
  254.  * certain code d'erreur
  255.  *
  256.  * History:
  257.  * --------
  258.  * 1993: fplanque: Created
  259.  * 19.06.94: Plein de nouveaux codes d'erreur
  260.  * 19.06.94: Fonction renvoie maintenant le bouton press‚
  261.  */   
  262. int alert( int type, ... )
  263. {
  264.     static    char    *unknown = "[3][Erreur No:         |                           |...][   OK   ]";
  265.     int        n_reponse = 1;            /* Par d‚faut */
  266.  
  267.     switch( type )
  268.     {
  269.         case ENOENT:                        /* Errno 2 */
  270.             form_error( 2 );                    /* File not found */
  271.             break;
  272.             
  273.         case ENOTDIR:                        /* Errno 20 */
  274.             form_error( 3 );                    /* Path not found */
  275.             break;
  276.             
  277.         case    DLG_QUIT:                
  278.             n_reponse = form_alert( 1, "[2][|"
  279.                                                         "Voulez-vous|"
  280.                                                         "vraiment quitter?]"
  281.                                                         "[Quitter|Annuler]");
  282.             break;
  283.             
  284.         case    DLG_SAVE_QUIT:                
  285.             n_reponse = form_alert( 1,"[3][Certains fichiers charg‚s|"
  286.                                                     "en m‚moire on ‚t‚ modifi‚s|"
  287.                                                     "mais n'ont pas encore ‚t‚|"
  288.                                                     "sauv‚s sur disque. Voulez|"
  289.                                                     "vous les sauver maintenant?]"
  290.                                                     "[Sauver|Jeter|Annuler]");
  291.             break;
  292.  
  293.         case    DLG_SAVEBEFORECLOSE:
  294.             n_reponse = form_alert( 1,"[2][Ce document a ‚t‚ modifi‚!|"
  295.                                                     "Voulez-vous sauver ces|"
  296.                                                     "modifications avant de|"
  297.                                                     "fermer le document?]"
  298.                                                     "[Sauver|Jeter|Annuler]");
  299.             break;
  300.  
  301.         case    PERR_IMPOSSIBLE_OP:
  302.             form_alert( 1,"[1][|"
  303.                                     "Cette op‚ration|"
  304.                                     "est impossible!]"
  305.                                     "[ Abandon ]");
  306.             break;
  307.             
  308.         case    PERR_NO_FILENAME:
  309.             n_reponse = form_alert( 1 , "[3][|"
  310.                                                         "Vous n'avez pas donn‚|"
  311.                                                         "de nom de fichier!]"
  312.                                                         "[R‚essayer|Abandonner]");
  313.             break;
  314.             
  315.         case    PERR_INCORRECT_PATH:
  316.             n_reponse = form_alert( 1,"[3][|"
  317.                                                     "Le chemin d'accŠs sp‚cifi‚|"
  318.                                                     "est incorrect !]"
  319.                                                     "[R‚essayer|Abandonner]");
  320.             break;
  321.  
  322.         case NOMEM_OPENDOC:
  323.             form_alert( 1,"[3][|"
  324.                                     "Il n'y a pas assez|"
  325.                                     "de m‚moire libre pour|"
  326.                                     "ouvrir ce document!]"
  327.                                     "[ Abandon ]");
  328.             break;
  329.  
  330.         case NOMEM_OPENFILE:
  331.             form_alert( 1,"[3][|"
  332.                                     "Il n'y a pas assez|"
  333.                                     "de m‚moire libre pour|"
  334.                                     "charger ce fichier!]"
  335.                                     "[ Abandon ]");
  336.             break;
  337.  
  338.         case NOMEM_SAVEDOC:
  339.             form_alert( 1,"[3][|"
  340.                                     "Il n'y a pas assez|"
  341.                                     "de m‚moire libre pour|"
  342.                                     "sauver ce document!]"
  343.                                     "[ Abandon ]");
  344.             break;
  345.  
  346.         case NOMEM_OPENWIN:
  347.             form_alert( 1,"[3][D‚sol‚, il n'y a pas|"
  348.                                     "assez de m‚moire interne|"
  349.                                     "disponible pour ouvrir|"
  350.                                     "une nouvelle fenˆtre!]"
  351.                                     "[ Abandon ]");
  352.             break;
  353.         
  354.         case NOMORE_WIN:
  355.             form_alert( 1,"[1][D‚sol‚, il n'y a plus|"
  356.                                     "de fenˆtre disponible|"
  357.                                     "sur le bureau. Fermez|"
  358.                                     "une fenˆtre inutilis‚e.]"
  359.                                     "[ Abandon ]");
  360.             break;
  361.  
  362.         case NOMEM_NEWBUF:
  363.             form_alert( 1,"[1][D‚sol‚, il n'y a pas assez|"
  364.                                     "de m‚moire interne pour|"
  365.                                     "allouer un buffer de la|"
  366.                                     "taille demand‚e. La taille|"
  367.                                     "pr‚c‚dente est conserv‚e.]"
  368.                                     "[Poursuivre]");
  369.             break;
  370.                         
  371.  
  372.         case    QUERY_FILEFORMAT:
  373.             n_reponse = form_alert( 1,"[2][Le fichier auquel vous essayez|"
  374.                                                     "d'acc‚der ne peut ˆtre exploit‚|"
  375.                                                     "automatiquement. D‚sirez-vous|"
  376.                                                     "sp‚cifier explicitement le|"
  377.                                                     "format de donn‚es utilis‚?]"
  378.                                                     "[Sp‚cifier|Abandon]");
  379.             break;    
  380.  
  381.  
  382.         case    QUERY_VDTFORMAT:
  383.             n_reponse = form_alert( 1,"[2][S'agit-il d'un fichier|"
  384.                                                     "de pages vid‚otex cr‚‚|"
  385.                                                     "par STUT ONE version|"
  386.                                                     "2.3, 2.4, 2.5 ou 2.6?]"
  387.                                                     "[Oui|Non]");
  388.             break;    
  389.  
  390.  
  391.         case BAD_FILEFMT:
  392.             form_alert( 1,"[1][Le format du fichier auquel|"
  393.                                     "vous essayez d'acc‚der n'est|"
  394.                                     "PAS RECONNU par la pr‚sente|"
  395.                                     "version du logiciel! Donc:|"
  396.                                     "Impossible de l'exploiter...]"
  397.                                     "[ Abandon ]");
  398.             break;
  399.             
  400.         case BAD_HEADFMT:
  401.             form_alert( 1,"[1][Le header du fichier auquel vous|"
  402.                                     "essayez d'acc‚der pourrait ˆtre|"
  403.                                     "ALTERE ou bien ICOMPATIBLE avec|"
  404.                                     "la pr‚sente version du logiciel!|"
  405.                                     "Donc: Impossible … exploiter...]"
  406.                                     "[ Abandon ]");
  407.             break;
  408.             
  409.         case BAD_FILEOWN:
  410.             form_alert( 1,"[1][Le fichier auquel vous|"
  411.                                     "essayez d'acc‚der n'est pas|"
  412.                                     "au FORMAT Stut One.|"
  413.                                     "Il a ‚t‚ cr‚‚ par une autre|"
  414.                                     "application non-compatible.]"
  415.                                     "[ Abandon ]");
  416.             break;
  417.             
  418.         case BAD_CONTENT:
  419.         {
  420.             static char *texte =   "[1][Op‚ration impossible:|"
  421.                                                 "Le fichier auquel|"
  422.                                                 "vous essayez d'acc‚der|"
  423.                                                 "n'est pas un fichier|"
  424.                                                 "de .............. ! ]"
  425.                                                 "[ Abandon ]";
  426.  
  427.             /* Argument suppl‚mentaire: */
  428.             int        ftype;            /* Type de fichier */
  429.             /* Argument variable: */
  430.             va_list    adpar;
  431.             /* Initialise ce pointeur: */
  432.             va_start ( adpar, type );    /* Denier arg fixe = type */
  433.             /* RecupŠre argument suppl‚mentaire: */
  434.             ftype = va_arg( adpar, int );        
  435.  
  436.             /* Fixe type de donn‚es dans le texte: */
  437.             switch ( ftype )
  438.             {
  439.                 case    FS_ARBO:
  440.                     memcpy ( texte + 88, "d'arborescence !    ", 20 );
  441.                     break;
  442.  
  443.                 case    FS_PAGES_ECRAN:
  444.                     memcpy ( texte + 88, "de pages ‚cran !    ", 20 );
  445.                     break;
  446.  
  447.                 case    FS_INF:
  448.                     memcpy ( texte + 88, "de paramŠtres !     ", 20 );
  449.                     break;
  450.  
  451.                 case    FS_INI:
  452.                     memcpy ( texte + 88, "de configuration !  ", 20 );
  453.                     break;
  454.  
  455.                 case    FS_DATAS:
  456.                     memcpy ( texte + 88, "de bases de donn‚es!", 20 );
  457.                     break;
  458.                     
  459.                 case    FS_TEXTES:
  460.                     memcpy ( texte + 88, "de textes!          ", 20 );
  461.                     break;
  462.                     
  463.                 case    FS_DXF:
  464.                     memcpy ( texte + 88, "de donn‚es DXF !    ", 20 );
  465.                     break;
  466.                     
  467.                 default:
  468.                     ping();
  469.             }
  470.  
  471.             /* Affiche alerte */
  472.             form_alert( 1, texte );
  473.             break;
  474.         }
  475.             
  476.         case    UNEXPECTED_FFMT:
  477.             form_alert( 1,"[1][Le fichier auquel vous essayez|"
  478.                                     "d'acc‚der est endommag‚ et son|"
  479.                                     "contenu ne peut ˆtre exploit‚!|"
  480.                                     "(Causes possibles: Fausse manip,|"
  481.                                     "disque d‚fectueux, virus...)]"
  482.                                     "[ Abandon ]");
  483.             break;
  484.  
  485.         case    BAD_VERSION:
  486.             form_alert( 1,"[1][Le format du fichier|"
  487.                                     "auquel vous essayez|"
  488.                                     "d'acc‚der ne peut ˆtre|"
  489.                                     "exploit‚ par cette|"
  490.                                     "version de STUT ONE.]"
  491.                                     "[ Abandon ]");
  492.             break;
  493.             
  494.         case    DISK_CANTCREATEDIR:
  495.             /* Ne peux pas cr‚er le dossier */
  496.             form_alert( 1,"[3][Impossible de cr‚er|"
  497.                                     "le dossier!]"
  498.                                     "[ Abandon ]");
  499.             break;
  500.  
  501.         case    DISK_CANTENTERDIR:
  502.             form_alert( 1,"[3][Impossible d'ouvrir|"
  503.                                     "le dossier!]"
  504.                                     "[ Abandon ]");
  505.             break;
  506.  
  507.  
  508.  
  509.         default:
  510.             printf("Erreur: %d \n",type);        /* PROVISOIRE */
  511.             form_alert( 1, unknown );
  512.     }
  513.  
  514.     return    n_reponse;
  515. }
  516.  
  517.